// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Code generated by sidekick. DO NOT EDIT.

/// A dyn-compatible, crate-private version of [super::DepService].
#[async_trait::async_trait]
pub trait DepService: std::fmt::Debug + Send + Sync {
    async fn list_lb_traffic_extensions(
        &self,
        req: crate::model::ListLbTrafficExtensionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListLbTrafficExtensionsResponse>>;

    async fn get_lb_traffic_extension(
        &self,
        req: crate::model::GetLbTrafficExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::LbTrafficExtension>>;

    async fn create_lb_traffic_extension(
        &self,
        req: crate::model::CreateLbTrafficExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_lb_traffic_extension(
        &self,
        req: crate::model::UpdateLbTrafficExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_lb_traffic_extension(
        &self,
        req: crate::model::DeleteLbTrafficExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_lb_route_extensions(
        &self,
        req: crate::model::ListLbRouteExtensionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListLbRouteExtensionsResponse>>;

    async fn get_lb_route_extension(
        &self,
        req: crate::model::GetLbRouteExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::LbRouteExtension>>;

    async fn create_lb_route_extension(
        &self,
        req: crate::model::CreateLbRouteExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_lb_route_extension(
        &self,
        req: crate::model::UpdateLbRouteExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_lb_route_extension(
        &self,
        req: crate::model::DeleteLbRouteExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_lb_edge_extensions(
        &self,
        req: crate::model::ListLbEdgeExtensionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListLbEdgeExtensionsResponse>>;

    async fn get_lb_edge_extension(
        &self,
        req: crate::model::GetLbEdgeExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::LbEdgeExtension>>;

    async fn create_lb_edge_extension(
        &self,
        req: crate::model::CreateLbEdgeExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_lb_edge_extension(
        &self,
        req: crate::model::UpdateLbEdgeExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_lb_edge_extension(
        &self,
        req: crate::model::DeleteLbEdgeExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_authz_extensions(
        &self,
        req: crate::model::ListAuthzExtensionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListAuthzExtensionsResponse>>;

    async fn get_authz_extension(
        &self,
        req: crate::model::GetAuthzExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::AuthzExtension>>;

    async fn create_authz_extension(
        &self,
        req: crate::model::CreateAuthzExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_authz_extension(
        &self,
        req: crate::model::UpdateAuthzExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_authz_extension(
        &self,
        req: crate::model::DeleteAuthzExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>>;

    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>>;

    async fn set_iam_policy(
        &self,
        req: iam_v1::model::SetIamPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<iam_v1::model::Policy>>;

    async fn get_iam_policy(
        &self,
        req: iam_v1::model::GetIamPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<iam_v1::model::Policy>>;

    async fn test_iam_permissions(
        &self,
        req: iam_v1::model::TestIamPermissionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<iam_v1::model::TestIamPermissionsResponse>>;

    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>>;

    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    fn get_polling_error_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_error_policy::PollingErrorPolicy>;

    fn get_polling_backoff_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_backoff_policy::PollingBackoffPolicy>;
}

/// All implementations of [super::DepService] also implement [DepService].
#[async_trait::async_trait]
impl<T: super::DepService> DepService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn list_lb_traffic_extensions(
        &self,
        req: crate::model::ListLbTrafficExtensionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListLbTrafficExtensionsResponse>> {
        T::list_lb_traffic_extensions(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_lb_traffic_extension(
        &self,
        req: crate::model::GetLbTrafficExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::LbTrafficExtension>> {
        T::get_lb_traffic_extension(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_lb_traffic_extension(
        &self,
        req: crate::model::CreateLbTrafficExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_lb_traffic_extension(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_lb_traffic_extension(
        &self,
        req: crate::model::UpdateLbTrafficExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_lb_traffic_extension(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_lb_traffic_extension(
        &self,
        req: crate::model::DeleteLbTrafficExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_lb_traffic_extension(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_lb_route_extensions(
        &self,
        req: crate::model::ListLbRouteExtensionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListLbRouteExtensionsResponse>> {
        T::list_lb_route_extensions(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_lb_route_extension(
        &self,
        req: crate::model::GetLbRouteExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::LbRouteExtension>> {
        T::get_lb_route_extension(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_lb_route_extension(
        &self,
        req: crate::model::CreateLbRouteExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_lb_route_extension(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_lb_route_extension(
        &self,
        req: crate::model::UpdateLbRouteExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_lb_route_extension(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_lb_route_extension(
        &self,
        req: crate::model::DeleteLbRouteExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_lb_route_extension(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_lb_edge_extensions(
        &self,
        req: crate::model::ListLbEdgeExtensionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListLbEdgeExtensionsResponse>> {
        T::list_lb_edge_extensions(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_lb_edge_extension(
        &self,
        req: crate::model::GetLbEdgeExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::LbEdgeExtension>> {
        T::get_lb_edge_extension(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_lb_edge_extension(
        &self,
        req: crate::model::CreateLbEdgeExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_lb_edge_extension(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_lb_edge_extension(
        &self,
        req: crate::model::UpdateLbEdgeExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_lb_edge_extension(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_lb_edge_extension(
        &self,
        req: crate::model::DeleteLbEdgeExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_lb_edge_extension(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_authz_extensions(
        &self,
        req: crate::model::ListAuthzExtensionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListAuthzExtensionsResponse>> {
        T::list_authz_extensions(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_authz_extension(
        &self,
        req: crate::model::GetAuthzExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::AuthzExtension>> {
        T::get_authz_extension(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_authz_extension(
        &self,
        req: crate::model::CreateAuthzExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_authz_extension(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_authz_extension(
        &self,
        req: crate::model::UpdateAuthzExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_authz_extension(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_authz_extension(
        &self,
        req: crate::model::DeleteAuthzExtensionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_authz_extension(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>> {
        T::list_locations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>> {
        T::get_location(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn set_iam_policy(
        &self,
        req: iam_v1::model::SetIamPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<iam_v1::model::Policy>> {
        T::set_iam_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_iam_policy(
        &self,
        req: iam_v1::model::GetIamPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<iam_v1::model::Policy>> {
        T::get_iam_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn test_iam_permissions(
        &self,
        req: iam_v1::model::TestIamPermissionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<iam_v1::model::TestIamPermissionsResponse>> {
        T::test_iam_permissions(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>> {
        T::list_operations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::get_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::cancel_operation(self, req, options).await
    }

    fn get_polling_error_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_error_policy::PollingErrorPolicy> {
        T::get_polling_error_policy(self, options)
    }

    fn get_polling_backoff_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_backoff_policy::PollingBackoffPolicy> {
        T::get_polling_backoff_policy(self, options)
    }
}

/// A dyn-compatible, crate-private version of [super::NetworkServices].
#[async_trait::async_trait]
pub trait NetworkServices: std::fmt::Debug + Send + Sync {
    async fn list_endpoint_policies(
        &self,
        req: crate::model::ListEndpointPoliciesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListEndpointPoliciesResponse>>;

    async fn get_endpoint_policy(
        &self,
        req: crate::model::GetEndpointPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::EndpointPolicy>>;

    async fn create_endpoint_policy(
        &self,
        req: crate::model::CreateEndpointPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_endpoint_policy(
        &self,
        req: crate::model::UpdateEndpointPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_endpoint_policy(
        &self,
        req: crate::model::DeleteEndpointPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_wasm_plugin_versions(
        &self,
        req: crate::model::ListWasmPluginVersionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListWasmPluginVersionsResponse>>;

    async fn get_wasm_plugin_version(
        &self,
        req: crate::model::GetWasmPluginVersionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::WasmPluginVersion>>;

    async fn create_wasm_plugin_version(
        &self,
        req: crate::model::CreateWasmPluginVersionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_wasm_plugin_version(
        &self,
        req: crate::model::DeleteWasmPluginVersionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_wasm_plugins(
        &self,
        req: crate::model::ListWasmPluginsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListWasmPluginsResponse>>;

    async fn get_wasm_plugin(
        &self,
        req: crate::model::GetWasmPluginRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::WasmPlugin>>;

    async fn create_wasm_plugin(
        &self,
        req: crate::model::CreateWasmPluginRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_wasm_plugin(
        &self,
        req: crate::model::UpdateWasmPluginRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_wasm_plugin(
        &self,
        req: crate::model::DeleteWasmPluginRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_gateways(
        &self,
        req: crate::model::ListGatewaysRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListGatewaysResponse>>;

    async fn get_gateway(
        &self,
        req: crate::model::GetGatewayRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Gateway>>;

    async fn create_gateway(
        &self,
        req: crate::model::CreateGatewayRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_gateway(
        &self,
        req: crate::model::UpdateGatewayRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_gateway(
        &self,
        req: crate::model::DeleteGatewayRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_grpc_routes(
        &self,
        req: crate::model::ListGrpcRoutesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListGrpcRoutesResponse>>;

    async fn get_grpc_route(
        &self,
        req: crate::model::GetGrpcRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::GrpcRoute>>;

    async fn create_grpc_route(
        &self,
        req: crate::model::CreateGrpcRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_grpc_route(
        &self,
        req: crate::model::UpdateGrpcRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_grpc_route(
        &self,
        req: crate::model::DeleteGrpcRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_http_routes(
        &self,
        req: crate::model::ListHttpRoutesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListHttpRoutesResponse>>;

    async fn get_http_route(
        &self,
        req: crate::model::GetHttpRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::HttpRoute>>;

    async fn create_http_route(
        &self,
        req: crate::model::CreateHttpRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_http_route(
        &self,
        req: crate::model::UpdateHttpRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_http_route(
        &self,
        req: crate::model::DeleteHttpRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_tcp_routes(
        &self,
        req: crate::model::ListTcpRoutesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListTcpRoutesResponse>>;

    async fn get_tcp_route(
        &self,
        req: crate::model::GetTcpRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::TcpRoute>>;

    async fn create_tcp_route(
        &self,
        req: crate::model::CreateTcpRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_tcp_route(
        &self,
        req: crate::model::UpdateTcpRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_tcp_route(
        &self,
        req: crate::model::DeleteTcpRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_tls_routes(
        &self,
        req: crate::model::ListTlsRoutesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListTlsRoutesResponse>>;

    async fn get_tls_route(
        &self,
        req: crate::model::GetTlsRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::TlsRoute>>;

    async fn create_tls_route(
        &self,
        req: crate::model::CreateTlsRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_tls_route(
        &self,
        req: crate::model::UpdateTlsRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_tls_route(
        &self,
        req: crate::model::DeleteTlsRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_service_bindings(
        &self,
        req: crate::model::ListServiceBindingsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListServiceBindingsResponse>>;

    async fn get_service_binding(
        &self,
        req: crate::model::GetServiceBindingRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ServiceBinding>>;

    async fn create_service_binding(
        &self,
        req: crate::model::CreateServiceBindingRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_service_binding(
        &self,
        req: crate::model::UpdateServiceBindingRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_service_binding(
        &self,
        req: crate::model::DeleteServiceBindingRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_meshes(
        &self,
        req: crate::model::ListMeshesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListMeshesResponse>>;

    async fn get_mesh(
        &self,
        req: crate::model::GetMeshRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Mesh>>;

    async fn create_mesh(
        &self,
        req: crate::model::CreateMeshRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_mesh(
        &self,
        req: crate::model::UpdateMeshRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_mesh(
        &self,
        req: crate::model::DeleteMeshRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_service_lb_policies(
        &self,
        req: crate::model::ListServiceLbPoliciesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListServiceLbPoliciesResponse>>;

    async fn get_service_lb_policy(
        &self,
        req: crate::model::GetServiceLbPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ServiceLbPolicy>>;

    async fn create_service_lb_policy(
        &self,
        req: crate::model::CreateServiceLbPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_service_lb_policy(
        &self,
        req: crate::model::UpdateServiceLbPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_service_lb_policy(
        &self,
        req: crate::model::DeleteServiceLbPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn get_gateway_route_view(
        &self,
        req: crate::model::GetGatewayRouteViewRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::GatewayRouteView>>;

    async fn get_mesh_route_view(
        &self,
        req: crate::model::GetMeshRouteViewRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::MeshRouteView>>;

    async fn list_gateway_route_views(
        &self,
        req: crate::model::ListGatewayRouteViewsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListGatewayRouteViewsResponse>>;

    async fn list_mesh_route_views(
        &self,
        req: crate::model::ListMeshRouteViewsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListMeshRouteViewsResponse>>;

    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>>;

    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>>;

    async fn set_iam_policy(
        &self,
        req: iam_v1::model::SetIamPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<iam_v1::model::Policy>>;

    async fn get_iam_policy(
        &self,
        req: iam_v1::model::GetIamPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<iam_v1::model::Policy>>;

    async fn test_iam_permissions(
        &self,
        req: iam_v1::model::TestIamPermissionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<iam_v1::model::TestIamPermissionsResponse>>;

    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>>;

    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    fn get_polling_error_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_error_policy::PollingErrorPolicy>;

    fn get_polling_backoff_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_backoff_policy::PollingBackoffPolicy>;
}

/// All implementations of [super::NetworkServices] also implement [NetworkServices].
#[async_trait::async_trait]
impl<T: super::NetworkServices> NetworkServices for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn list_endpoint_policies(
        &self,
        req: crate::model::ListEndpointPoliciesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListEndpointPoliciesResponse>> {
        T::list_endpoint_policies(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_endpoint_policy(
        &self,
        req: crate::model::GetEndpointPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::EndpointPolicy>> {
        T::get_endpoint_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_endpoint_policy(
        &self,
        req: crate::model::CreateEndpointPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_endpoint_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_endpoint_policy(
        &self,
        req: crate::model::UpdateEndpointPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_endpoint_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_endpoint_policy(
        &self,
        req: crate::model::DeleteEndpointPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_endpoint_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_wasm_plugin_versions(
        &self,
        req: crate::model::ListWasmPluginVersionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListWasmPluginVersionsResponse>> {
        T::list_wasm_plugin_versions(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_wasm_plugin_version(
        &self,
        req: crate::model::GetWasmPluginVersionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::WasmPluginVersion>> {
        T::get_wasm_plugin_version(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_wasm_plugin_version(
        &self,
        req: crate::model::CreateWasmPluginVersionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_wasm_plugin_version(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_wasm_plugin_version(
        &self,
        req: crate::model::DeleteWasmPluginVersionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_wasm_plugin_version(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_wasm_plugins(
        &self,
        req: crate::model::ListWasmPluginsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListWasmPluginsResponse>> {
        T::list_wasm_plugins(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_wasm_plugin(
        &self,
        req: crate::model::GetWasmPluginRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::WasmPlugin>> {
        T::get_wasm_plugin(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_wasm_plugin(
        &self,
        req: crate::model::CreateWasmPluginRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_wasm_plugin(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_wasm_plugin(
        &self,
        req: crate::model::UpdateWasmPluginRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_wasm_plugin(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_wasm_plugin(
        &self,
        req: crate::model::DeleteWasmPluginRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_wasm_plugin(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_gateways(
        &self,
        req: crate::model::ListGatewaysRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListGatewaysResponse>> {
        T::list_gateways(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_gateway(
        &self,
        req: crate::model::GetGatewayRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Gateway>> {
        T::get_gateway(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_gateway(
        &self,
        req: crate::model::CreateGatewayRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_gateway(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_gateway(
        &self,
        req: crate::model::UpdateGatewayRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_gateway(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_gateway(
        &self,
        req: crate::model::DeleteGatewayRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_gateway(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_grpc_routes(
        &self,
        req: crate::model::ListGrpcRoutesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListGrpcRoutesResponse>> {
        T::list_grpc_routes(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_grpc_route(
        &self,
        req: crate::model::GetGrpcRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::GrpcRoute>> {
        T::get_grpc_route(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_grpc_route(
        &self,
        req: crate::model::CreateGrpcRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_grpc_route(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_grpc_route(
        &self,
        req: crate::model::UpdateGrpcRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_grpc_route(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_grpc_route(
        &self,
        req: crate::model::DeleteGrpcRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_grpc_route(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_http_routes(
        &self,
        req: crate::model::ListHttpRoutesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListHttpRoutesResponse>> {
        T::list_http_routes(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_http_route(
        &self,
        req: crate::model::GetHttpRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::HttpRoute>> {
        T::get_http_route(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_http_route(
        &self,
        req: crate::model::CreateHttpRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_http_route(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_http_route(
        &self,
        req: crate::model::UpdateHttpRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_http_route(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_http_route(
        &self,
        req: crate::model::DeleteHttpRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_http_route(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_tcp_routes(
        &self,
        req: crate::model::ListTcpRoutesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListTcpRoutesResponse>> {
        T::list_tcp_routes(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_tcp_route(
        &self,
        req: crate::model::GetTcpRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::TcpRoute>> {
        T::get_tcp_route(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_tcp_route(
        &self,
        req: crate::model::CreateTcpRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_tcp_route(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_tcp_route(
        &self,
        req: crate::model::UpdateTcpRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_tcp_route(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_tcp_route(
        &self,
        req: crate::model::DeleteTcpRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_tcp_route(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_tls_routes(
        &self,
        req: crate::model::ListTlsRoutesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListTlsRoutesResponse>> {
        T::list_tls_routes(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_tls_route(
        &self,
        req: crate::model::GetTlsRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::TlsRoute>> {
        T::get_tls_route(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_tls_route(
        &self,
        req: crate::model::CreateTlsRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_tls_route(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_tls_route(
        &self,
        req: crate::model::UpdateTlsRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_tls_route(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_tls_route(
        &self,
        req: crate::model::DeleteTlsRouteRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_tls_route(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_service_bindings(
        &self,
        req: crate::model::ListServiceBindingsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListServiceBindingsResponse>> {
        T::list_service_bindings(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_service_binding(
        &self,
        req: crate::model::GetServiceBindingRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ServiceBinding>> {
        T::get_service_binding(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_service_binding(
        &self,
        req: crate::model::CreateServiceBindingRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_service_binding(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_service_binding(
        &self,
        req: crate::model::UpdateServiceBindingRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_service_binding(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_service_binding(
        &self,
        req: crate::model::DeleteServiceBindingRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_service_binding(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_meshes(
        &self,
        req: crate::model::ListMeshesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListMeshesResponse>> {
        T::list_meshes(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_mesh(
        &self,
        req: crate::model::GetMeshRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Mesh>> {
        T::get_mesh(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_mesh(
        &self,
        req: crate::model::CreateMeshRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_mesh(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_mesh(
        &self,
        req: crate::model::UpdateMeshRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_mesh(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_mesh(
        &self,
        req: crate::model::DeleteMeshRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_mesh(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_service_lb_policies(
        &self,
        req: crate::model::ListServiceLbPoliciesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListServiceLbPoliciesResponse>> {
        T::list_service_lb_policies(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_service_lb_policy(
        &self,
        req: crate::model::GetServiceLbPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ServiceLbPolicy>> {
        T::get_service_lb_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_service_lb_policy(
        &self,
        req: crate::model::CreateServiceLbPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_service_lb_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_service_lb_policy(
        &self,
        req: crate::model::UpdateServiceLbPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_service_lb_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_service_lb_policy(
        &self,
        req: crate::model::DeleteServiceLbPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_service_lb_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_gateway_route_view(
        &self,
        req: crate::model::GetGatewayRouteViewRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::GatewayRouteView>> {
        T::get_gateway_route_view(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_mesh_route_view(
        &self,
        req: crate::model::GetMeshRouteViewRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::MeshRouteView>> {
        T::get_mesh_route_view(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_gateway_route_views(
        &self,
        req: crate::model::ListGatewayRouteViewsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListGatewayRouteViewsResponse>> {
        T::list_gateway_route_views(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_mesh_route_views(
        &self,
        req: crate::model::ListMeshRouteViewsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListMeshRouteViewsResponse>> {
        T::list_mesh_route_views(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>> {
        T::list_locations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>> {
        T::get_location(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn set_iam_policy(
        &self,
        req: iam_v1::model::SetIamPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<iam_v1::model::Policy>> {
        T::set_iam_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_iam_policy(
        &self,
        req: iam_v1::model::GetIamPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<iam_v1::model::Policy>> {
        T::get_iam_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn test_iam_permissions(
        &self,
        req: iam_v1::model::TestIamPermissionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<iam_v1::model::TestIamPermissionsResponse>> {
        T::test_iam_permissions(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>> {
        T::list_operations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::get_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::cancel_operation(self, req, options).await
    }

    fn get_polling_error_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_error_policy::PollingErrorPolicy> {
        T::get_polling_error_policy(self, options)
    }

    fn get_polling_backoff_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_backoff_policy::PollingBackoffPolicy> {
        T::get_polling_backoff_policy(self, options)
    }
}
